package com.peter.ai.util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class ZhouzaojiFileUtils {
	/**
	 * 将大文本小说转换成按章节分割的文本
	 */
	public static void splitFile(String pathname, String replaceStr, String destDir) {
		if (replaceStr == null) {
			replaceStr = "";
		}
		String[] rps = replaceStr.split(",");
		StringBuffer sb = new StringBuffer();
		// 防止文件建立或读取失败，用catch捕捉错误并打印，也可以throw;
		// 不关闭文件会导致资源的泄露，读写文件都同理
		// Java7的try-with-resources可以优雅关闭文件，异常时自动关闭文件；详细解读https://stackoverflow.com/a/12665271
		try (FileReader reader = new FileReader(pathname); BufferedReader br = new BufferedReader(reader) // 建立一个对象，它把文件内容转成计算机能读懂的语言
		) {
			String line;
			String title = "";
			int count = 0;
			// 网友推荐更加简洁的写法
			while ((line = br.readLine()) != null) {
				if (line.contains("第") && line.contains("回") && line.length() < 40) {
					//line = line.substring(line.indexOf("【")+1, line.indexOf("】"));
					if (sb.length() != 0) {
						writeFile(title, sb.toString(), destDir);
						sb.setLength(0);
					}
					if (count < 10) {
						title = "000" + count++ + line;
					} else if (count >= 10 && count < 100) {
						title = "00" + count++ + line;
					} else if (count >= 100 && count < 1000) {
						title = "0" + count++ + line;
					} else {
						title = count++ + line;
					}
					line += "。";
				}
				int jump = 0;
				for (String str : rps) {
					if (line.contains(str)) {
						jump = 1;
					}
				}
				if (jump == 0) {
					// 一次读入一行数据
					System.out.println(line);
					sb.append(line + "\r\n");
				}

			}
			// 最后一章处理
			writeFile(title, sb.toString(), destDir);
			sb.setLength(0);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 读取文本内容
	 */
	public static String readFile(String pathname) {
		StringBuffer sb = new StringBuffer();
		// 防止文件建立或读取失败，用catch捕捉错误并打印，也可以throw;
		// 不关闭文件会导致资源的泄露，读写文件都同理
		// Java7的try-with-resources可以优雅关闭文件，异常时自动关闭文件；详细解读https://stackoverflow.com/a/12665271
		try (FileReader reader = new FileReader(pathname); BufferedReader br = new BufferedReader(reader) // 建立一个对象，它把文件内容转成计算机能读懂的语言
		) {
			String line;
			// 网友推荐更加简洁的写法
			while ((line = br.readLine()) != null) {
				System.out.println(line);
				sb.append(line);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return sb.toString();
	}

	/**
	 * 写入TXT文件
	 */
	public static void writeFile(String title, String content, String path) {
		try {
			File file = new File(path);
			if (!file.exists()) {
				file.mkdirs();
			}
			File writeName = new File(path + title + ".txt"); // 相对路径，如果没有则要建立一个新的output.txt文件
			writeName.createNewFile(); // 创建新文件,有同名的文件的话直接覆盖
			try (FileWriter writer = new FileWriter(writeName); BufferedWriter out = new BufferedWriter(writer)) {
				out.write(content); // \r\n即为换行
				out.flush(); // 把缓存区内容压入文件
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
